﻿@{
    Layout = "~/Views/Shared/_Layout_Turorials.cshtml";
}
<h1>介绍 </h1>
<p>
    Orleans 是一个不需要很了解分布式各种概念，就能很方便、快捷的构建具有可伸缩能力的分布式应用程序开发框架。它是由微软研究院（Microsoft Research）研发的下一代云计算编程框架。Orleans已被微软的部分产品部门广泛使用、部署在微软的Azure云之上，如343 InIndustries使用Orleans作为光环游戏系列（光环4,、光环5的云服务），当然也包括其它一些公司正在使用Orleans。
</p>
<p>
    Orleans从2015年1月份开源之后，迅速获得大量关注，立足活跃的开发者社区和Orleans Team的贡献，Orleans得以快速迭代更新。微软研究院（Microsoft Research）将对Orleans进行持续投入，推动Orleans成为 .NET领域的分布式开发框架。
</p>

<p>
    传统的三层（N层）（无状态的前端、无状态的中间层和存储层）在系统的可伸缩性是存在限制的，存储层IO延迟和吞吐能力限制，会影响到每一个用户请求。
    通常情况下会在存储层和中间层之间增加一个缓存层来提升性能，但是缓存层会不可避免的带来数据一致性的问题（缓存和存储层数据不一致），因此需要额外实现一些并发控制协议。
</p>
<p>
    OOP是一种建立复杂系统模型的直观方法，但目前很多分布式架构是面向服务的体系结构（SOA），虽然大家仍然可以在实现服务组件是使用OOP。
    在实现层面，SOA的可伸缩性能力是基于数据分区，和应用程序的概念模型不匹配，导致以主流的OOP方式构建分布式应用很困难
</p>
<p>
    传统的Actor模型以一种函数式组合的方式来应对这些挑战；Actor模型通过建立有状态的中间层，以函数组合的方式来封装一个业务实体，具备缓存的性能优势和状态更新的一致性（DDD中的聚合根通过行为守卫状态，聚合根状态在内存中，状态更新只能通过聚合行为，保证了状态的一致性）。
    如Erlang和Akka的Actor模型在解决分布式的复杂性上已经向前迈出一步，但开发人员仍需面对低层次的抽象和服务，关键的挑战在于面对Actor的生命周期管理、处理故障和Actor恢复、分布式资源管理等复杂问题，因此构建分布式应用程序时，需要的开发人员必须是分布式系统专家级别的。
</p>
<p>
    Orleans是一种新的Actor模式实现，Orleans借鉴了Erlang的Actor模式和分布式对象系统，提高了Actor的抽象级别，避免了传统Actor编程模型的复杂性。
    相较于Erlang Actor这种基于纯函数式编程语言，Orleans开发模型则直接利用.NET，并具备面向对象的能力,给开发人员提供了一种熟悉的对象交互模型。
    Orleans的目标不是分布式系统专家级别的开发人员，虽然Orleans对专家客户也有吸引力。
    和现有的基于Actor平台有本质差异，它是把Actor作为虚拟实体,而不是实际物理的。
</p>
<ul>
    <li>首先，一个Orleans的Actor总是存在的，但是它不能被显式地创建或销毁。它的存在超越任何内存中任何实例的生命周期，从而超越了任何特定服务器的生命周期。

    <li>
        第二，Orleans Actor是自动实例化:如果内存没有Actor实例，它会自动创建，发送到Actor的一个消息是当前服务器上创建一个新的实例。一个未使用的Actor实例作为运行时资源管理的一部分自动回收。一个actor实例从来不会失败: 如果服务器S崩溃, 发送给这个S中Actor的下一个消息将被自动实例化到另外一个服务器A，消除应用程序需要监督和人为编码显式地重建失败的Actor。
    </li>
    <li>
        第三，Actor的位置实例对应用程序代码是透明的,这极大地简化了编程。
    </li>
    <li>
        第四，Orleans可以自动创建多个实例相同的无状态的Actor，Actor可以无缝地热扩展。
    </li>
</ul>
<p>
    Orleans给开发人员一个虚拟"Actor空间",类似于虚拟内存，使他们能够调用系统中的任何Actor，不管它是否存在于内存。虚拟化间接依赖从虚拟Actor到实际Actor的映射。这种级别的间接寻址为运行时解决许多分布式系统问题带来机会，否则开发人员必须直接自己解决这些复杂问题，如Actor定位和负载平衡、失活未使用的Actor,复苏因服务器失败的Actor,这是出了名的困难。因此,虚拟Actor方法大大简化了编程模型。同时允许运行时加载和透明地从失败中恢复。

    Orleans作为一个开发框架，极大的简化了开发复杂的分布式应用程序的难度。
</p>
<p><a href="http://research.microsoft.com/pubs/210931/Orleans-MSR-TR-2014-41.pdf">Orleans白皮书</a></p>
